/**
 * Trie
 * 树是一种树型结构，是一种哈系树的变种，典型应用时统计、排序和保存大量字符串
 * 优点：利用字符串的公共前缀减少查询时间
 * Trie 树也被称为前缀树，利用 trie
 * 树可以快速判断一个集合中是否包含某个字符串或者以某个字符串开头的字符串
 *  - 区分指针数组和数组指针
 *    - int (*p)[10] : 这是一个数组指针定义了一个指向 10 个元素的数组的指针 p
 *    - int *p[10] : 这是一个指针数组，其中定义了一个数组 p
 * ，其中每一个元素都是一个 int 指针, 数组指针又被称为行指针
 *  `
 *    int(*p)[2];
 *    int a[2][2] = { 1, 2, 3, 4 };
 *    p = a;
 *    cout << p[0][0] << endl;
 *  `
 */
#include <iostream>
#include <string>
using namespace std;

class node {
public:
  // isEnd 表示以该字母结尾是否为一个单词
  bool isEnd = false;
  node *children[26];
};

class Trie {

public:
  Trie() {}

  void insert(string word) {
    int index;
    node *cur = root;
    for (auto w : word) {
      index = w - 'a';
      if (!cur->children[index]) {
        cur->children[index] = new node();
      }
      cur = cur->children[index];
    }
    cur->isEnd = true;
  }

  bool search(string word) {
    int index;
    node *cur = root;
    for (auto w : word) {
      index = w - 'a';
      if (!cur->children[index]) {
        return false;
      }
      cur = cur->children[index];
    }
    return cur->isEnd;
  }

  bool startsWith(string prefix) {
    int index;
    node *cur = root;
    for (auto w : prefix) {
      index = w - 'a';
      if (!cur->children[index]) {
        return false;
      }
      cur = cur->children[index];
    }
    return true;
  }

private:
  node *root = new node();
};

class T {
public:
  int a;
  string s;
  bool b;
  T *t[12];
  T *next;
};
int main() {
  int(*p)[10];
  (*p)[1] = 1;
  cout << p << endl;
  return 0;
}